package redecolaborativa.client;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AbsolutePanel;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;

public class SolicitacaoDeItem extends Composite {
	private AbsolutePanel absolutePanel;
	private Button btnRejeitar, btnAceitar;
	private String idSessao, idRequisicao, nomeItem, tempoPrevisto, beneficiado;
	private FachadaAsync fachada;
	
	public SolicitacaoDeItem(FachadaAsync fachada, String idSessao, String idRequisicao, String nomeItem, String tempoPrevisto, String beneficiado) {
		this.nomeItem = nomeItem;
		this.tempoPrevisto = tempoPrevisto;
		this.beneficiado = beneficiado;
		this.idRequisicao = idRequisicao;
		this.idSessao = idSessao;
		this.fachada = fachada;
		
		
		absolutePanel = new AbsolutePanel();
		initWidget(absolutePanel);
		absolutePanel.setSize("460px", "100px");
		
		this.btnAceitar = new Button("Aceitar");
		absolutePanel.add(btnAceitar, 378, 20);
		btnAceitar.setSize("60px", "28px");
		
		this.btnRejeitar = new Button("Rejeitar");
		absolutePanel.add(btnRejeitar, 378, 62);
		
		inicializaLabels();
		mostrarItens();
		aceitar();
		rejeitar();
	}
	
	private void mostrarItens() {
		Label lblNomeItem = new Label(nomeItem);
		lblNomeItem.setStyleName("caption-panel");
		absolutePanel.add(lblNomeItem, 62, 10);
		
		Label lblTempo = new Label(tempoPrevisto);
		lblTempo.setStyleName("caption-panel");
		absolutePanel.add(lblTempo, 144, 46);
		
		Label lblBeneficiado = new Label(beneficiado);
		lblBeneficiado.setStyleName("caption-panel");
		absolutePanel.add(lblBeneficiado, 174, 71);
	}
	
	private void aceitar() {
		btnAceitar.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					fachada.aprovarEmprestimo(idSessao, idRequisicao, new AsyncCallback<Void>() {
						@Override
						public void onSuccess(Void result) {
							btnAceitar.setEnabled(false);
							btnRejeitar.setEnabled(false);
							Window.alert("Item emprestado!");
						}
						@Override
						public void onFailure(Throwable caught) {
							btnAceitar.setEnabled(false);
							btnRejeitar.setEnabled(false);
							Window.alert("Item emprestado!");
						}
					});
				} catch (Exception e) {
					Window.alert(e.getMessage());
				}
			}
		});
	}
	
	private void rejeitar() {
		btnRejeitar.addClickHandler(new ClickHandler() {
			@Override
			public void onClick(ClickEvent event) {
				try {
					fachada.rejeitarEmprestimo(idSessao, idRequisicao, new AsyncCallback<Void>() {
						@Override
						public void onSuccess(Void result) {
							btnAceitar.setEnabled(false);
							btnRejeitar.setEnabled(false);
							Window.alert("Solicitacao de item rejeitada!");
						}
						@Override
						public void onFailure(Throwable caught) {
							btnAceitar.setEnabled(false);
							btnRejeitar.setEnabled(false);
							Window.alert("Solicitacao de item rejeitada!");
						}
					});
				} catch (Exception e) {
					Window.alert(e.getMessage());
				}
			}
		});
	}
	
	private void inicializaLabels() {
		Label lbDescricaoItem = new Label("Item: ");
		absolutePanel.add(lbDescricaoItem, 22, 10);
		Label lblTempoPrevisto = new Label("Tempo previsto: ");
		absolutePanel.add(lblTempoPrevisto, 22, 46);
		Label lblUsurioBeneficiado = new Label("Usu\u00E1rio beneficiado: ");
		absolutePanel.add(lblUsurioBeneficiado, 22, 71);
	}
}
